import { defineConfig, loadEnv } from 'vite'
// https://vitejs.dev/config/
import { fileURLToPath, URL } from 'node:url'
import { visualizer } from 'rollup-plugin-visualizer'
import vue from '@vitejs/plugin-vue';
//zip压缩
import viteCompression from 'vite-plugin-compression'
import globalStyle from '@originjs/vite-plugin-global-style'
//导入vxe-table配置
import { lazyImport, VxeResolver } from 'vite-plugin-lazy-import'
import path from 'path';
const getPath = (path) => {
    //path 需要获取的文件的路径，（相对于当前文件）
    //import.meta.url当前文件的路径
    return fileURLToPath(new URL(path, import.meta.url))
}
export default defineConfig(({ command, mode }) => {
    //mode 默认 development（npm run dev） production（npm run build） lib（npm run lib）;
    //command serve（npm run dev） build（npm run build）;
    //获取环境变量 环境变量以'JPAAS_'开头;
    const env = loadEnv(mode, process.cwd(), 'JPAAS_');
    let moduleConfig = {
        form:'@lowcode/jpaas-form-lib',
        base:'@lowcode/jpaas-base-lib',
        share:'@lowcode/jpaas-share-component',
    }
    return {
        plugins: [
            vue(),
            //  viteCompression(),
            globalStyle({
                lessEnabled: true
            }),
            visualizer({
                gzipSize: true,
                brotliSize: true,
                emitFile: false,
                filename: "preview.html", //分析图生成的文件名
                open: false //如果存在本地服务端口，将在打包后自动展示
            }),
            //启用压缩
            viteCompression(),
            lazyImport({
                resolvers: [
                    VxeResolver({
                        libraryName: 'vxe-table'
                    }),
                    VxeResolver({
                        libraryName: 'vxe-pc-ui'
                    })
                ]
            })
        ],
        resolve: {
            //引入文件时 忽略文件扩展名
            alias: {
                extensions: ['.vue'],
                '@': getPath('./src'),
                '@public': getPath('./public'),
                'vue': 'vue/dist/vue.esm-bundler.js',
                '~': path.resolve(__dirname, './node_modules')
            }
        },
        server: {
            port: 8010,
            host: '0.0.0.0',
            // watch:{
            //     ignored:["!**/node_modules/lowcode/jpaas-form-lib/**"]
            // }
        },
        optimizeDeps: {
            exclude:moduleConfig[mode]?[moduleConfig[mode]]:[]
            // exclude: ['@lowcode/jpaas-form-lib'],
        },
        css: {
            preprocessorOptions: {
                less: {
                    javascriptEnabled: true, // 启用 Less 的 JavaScript 支持
                },
            },
        },
        base: env.JPAAS_BASE_URL,//引入路径相当于webpack中的 baseUrl 或 publicPath
        build: {
            rollupOptions: {
                output: {
                    assetFileNames: "[hash]-[name].[ext]"
                }
            },
            //小于4kb图片转成base64
            assetsInlineLimit: 4096,
            //指定输出路径（相对于 项目根目录),默认dist.
            outDir: 'dist',
            //指定生成静态资源的存放路径（相对于 build.outDir）,默认assets
            assetsDir: 'assets',
            cssCodeSplit: false,
            //生成map文件
            sourcemap: false,
            //支持运行时编译
            runtimeCompiler: true,
            //可以为 false, 或 'terser'
            minify: "terser",
            //压缩选项
            terserOptions: {
                compress: {
                    drop_console: true,
                    drop_debugger: true
                }
            }
        },
        envPrefix: 'JPAAS_',
    }
})
